package com.leetcode;

import java.io.*;
import java.net.URL;
import java.util.*;

/*所谓 anagram, 就是两个词所用的字母及其个数都是一样的，但是，字母的位置不一样。比如 abcc 和 cbca 就是 anagram. 判断的方
 法比较简单，先把单个字母（字符）转成整数，然后利用了hashtable+计数器的原理进行判断。*/

public class Anagrams
{
	public ArrayList<String> anagrams(String[] strs)
	{
		ArrayList<String> result = new ArrayList<String>();
		HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();

		for (String str : strs)
		{
			char[] tempstr = str.toCharArray();
			Arrays.sort(tempstr);
			String sortedstr = new String(tempstr);
			if (map.containsKey(sortedstr))
			{
				map.get(sortedstr).add(str);
			}
			else
			{
				ArrayList<String> list = new ArrayList<String>();
				list.add(str);
				map.put(sortedstr, list);
			}
		}

		for (ArrayList<String> list : map.values())
		{
			if (list.size() > 1)
			{
				for (String str : list)
				{
					result.add(str);
				}
			}
		}
		return result;
	}
}